PHP Threepenny MVC Alles in elkaar zetten
We hebben de onderdelen van MVC gezien, tijd dus om alles in elkaar te zetten en de aanzet tot het Fric-frac MVC project te maken.
Stappenplan
- De dispatcher gebruiken
<?php use ThreepennyMVC\FrontController; include_once('../vendor/threepennymvc/FrontController.php'); include_once('../vendor/threepennymvc/Controller.php'); include_once('Controllers/AdminController.php'); include_once('Controllers/EventController.php'); $route = FrontController::getRouteData($_SERVER['REQUEST_URI'], 'Fricfrac', 'Admin', 'index'); $view = FrontController::dispatch($route); ?> <!DOCTYPE html> <html lang="nl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" type="text/css" href="/css/app.css"> <link rel="stylesheet" type="text/css" href="/css/icon-font.css"> <title>Fric-frac events</title> </head> <body class="page"> <header class="page-header"> <nav class="control-panel"> <a href="/index.php" class="tile"> <span class="icon-menu"></span> <span class="screen-reader-text">Admin index</span> </a> </nav> <h1 class="banner">Fric-frac</h1> </header> <?php echo $view();?> <footer class="page-footer"> <p>© ModernWays 2020</p> <p>Opdracht Programmeren 4</p> </footer> </body> </html>
- We zetten het volgende klaar:
- De view: Views/Admin/Index.php (PHP MVC Views)
- De controller: Controllers/AdminController.php (PHP MVC Controllers)
- In public/index.php:
- we sluiten de nodige klassen in
- we halen de route op met
getRouteData
- als er in de url geen entiteit en/of methode wordt opgegeven, gaat de dispatcher de
AdminController
instantiëren en deindex
actiemethode ervan uitvoeren. - we instantieren de controllerklasse en voeren de actiemethode uit
- de retourwaarde, die een functie is, slaan we op in een variabele met de naam
$view
- we voeren deze closure uit in de HTML door ronde hakken achter de
$view
variabele te plaatsen
- We zetten het volgende klaar:
- Als je met de ingebouwde webserver werkt moet je local.php aanpassen. Er is namelijk een probleem om de iconfonts te laden. In icon-font.css staat in de url een ? na de naam van de te laden font. Dat bestand met het vraagteken bestaat natuurlijk niet en zal dus niet geladen worden. Hier volgt code die het vraagteken en alles wat erna komt verwijdert:
<?php function cleanUpFileName ($requestUri) { $queryStart = strpos($requestUri, '?'); if ($queryStart > 0) { $requestUri = substr($requestUri, 0, $queryStart); } return $requestUri; } $uri = $_SERVER['REQUEST_URI']; $uri = cleanUpFileName($uri); $_SERVER['REQUEST_URI'] = $uri; if (file_exists(__DIR__ . '/' . $_SERVER['REQUEST_URI'])) { return false; // serve the requested resource as-is. } else { include_once 'index.php'; }
- Open de terminal
- Ga naar de public submap:
cd public - Start de ingebouwde webserver op met local.php:
php -S localhost:63346 local.php
- Ga naar de public submap:
- Open de browser
- als je de volgende url http://localhost:63346/ intypt krijg je:
- Type je http://localhost:63346/Event/Index in:
- Typ je http://localhost:63346/Event/UpdatingOne in:
2020-04-08 09:53:50